/**
 * 联系人相关接口
 */
const express = require("express")
const router = express.Router()
const pool = require("../../db/db")
const Response = require("../../utils/ResponseData")

/**
 * 新增联系人接口 /contact
 * 请求url：http://localhost:3001/contact/add
 * 请求method：post
 * 请求params：req.body 
 */
router.post('/add', (req, res, next) => {
    // 获取前端信息
    let { name, tel, isDefault } = req?.body
    // 获取前端传递的user_id
    let { uid } = req?.user
    // 要对isDefault进行判断，如果当前的isDefault处于默认，其他所有数据都要回归为不默认
    if (isDefault == 1) {

        // 将当前联系人设为默认联系人
        const sql = "update contact set isDefault=0 where user_id=?"
        // 执行sql
        pool.query(sql, [uid], (err, result) => {
            if (err) {
                console.log("Contact.js=>/contact/add接口", err)
                next(err)
                return
            }
            // 编写sql
            addContact(uid, name, tel, isDefault, next, res)
        })
    } else {
        addContact(uid, name, tel, isDefault, next, res)
    }


})
/**
 * 获取默认联系人信息（1条）
 * 请求url：http://localhost:3001/contact/get
 * 请求method:GET
 * @param uid 登录用的id
 * @param isDefault 默认联系人
 */
router.get('/get', (req, res, next) => {
    // 获取用户uid
    let { uid } = req?.user
    // 编写sql
    const sql = "select * from contact where user_id=? and isDefault=1"
    // 执行sql
    pool.query(sql, [uid], (err, result) => {
        if (err) {
            console.log("Contact.js=>/contact/get接口", err)
            next(err)
            return
        }
        if (result && result.length > 0) {
            res.send(Response.success(result, "联系人信息查询成功！"))
        } else {
            res.send(Response.error("联系人信息查询失败！"))
        }
    })
})
/**
 * 根据用户id查询联系人接口-返回n条
 * 请求url：http://localhost:3001/contact/getAll
 * @param uid 登录用户的id
 */
router.get("/getAll", (req, res, next) => {
    // 获取user_id
    let { uid } = req?.user
    // 编写sql语句
    const sql = "select * from contact where user_id =?"
    // 执行sql
    pool.querySync(sql, [uid])
        .then(result => {
            if (result && result.length > 0) {
                res.send(Response.success(result, "联系人列表信息获取成功！"))
            } else {
                res.send(Response.error("联系人列表信息获取失败！"))
            }
        })
        .catch(err => {
            if (err) {
                console.log("Contact.js=>/contact/getAll接口", err)
                next(err)
            }
        })
})

/**
 * 设置默认联系人
 * 请求url：http://localhost:3001/contact/update/:id
 * @param id:联系人id
 * @param uid:用户id
 */
router.put("/update/:id", (req, res, next) => {
    // 获取前端传递的信息
    let { id } = req?.params
    let { uid } = req?.user
    // 利用排他思想，先将这个用户下所有联系人设置为非默认，在将某一个联系人设置为默认
    const sql1 = "update contact set isDefault=0 where user_id =?"
    pool.query(sql1, [uid], err => {
        if (err) {
            console.log("Contact.js=>/contact/update接口", err)
            next(err)
            return
        }
        const sql2 = "update contact set isDefault=1 where id=?"
        pool.query(sql2, [id], (err2, result2) => {
            if (err2) {
                console.log("Contact.js=>/contact/update接口", err2)
                next(err)
                return
            }
            if (result2.affectedRows > 0) {
                res.send(Response.success(null, "默认联系人设置成功！"))
            } else {
                res.send(Response.error("默认联系人设置失败！"))
            }
        })
    })

})

/**
 * 根据联系人id查询联系人接口-返回1条
 * 请求url：http://localhost:3001/contact/get/:id
 */
router.get("/get/:id", (req, res, next) => {
    let { id } = req.params
    const sql = "select * from contact where id =?"
    pool.query(sql, [id], (err, result) => {
        if (err) {
            console.log("Contact.js=>/contact/get/:id接口", err)
            next(err)
            return
        }
        if (result.length > 0) {
            res.send(Response.success(result, "联系人信息获取成功！"))
        } else {
            res.send(Response.error("联系人信息获取失败！"))
        }
    })
})
/**
 * 修改联系人接口
 * 请求url：http://localhost:3001/contact/edit
 */
router.put("/edit", (req, res, next) => {
    // 获取传递过来的联系人信息
    let { id, name, tel, isDefault } = req?.body
    let { uid } = req?.user
    if (isDefault == 1) {
        // 利用排他思想，先将这个用户下所有联系人设置为非默认，在将某一个联系人设置为默认
        const sql1 = "update contact set isDefault=0 where user_id =?"
        pool.query(sql1, [uid], err => {
            if (err) {
                console.log("Contact.js=>/contact/update接口", err)
                next(err)
                return
            }
            updateContact(name, tel, isDefault, id, res)
        })
    } else {
        updateContact(name, tel, isDefault, id, res)
    }

})


/**
 * 删除联系人接口
 * 请求url：http://localhost:3001/contact/delete/:id
 */
router.delete("/delete/:id", (req, res, next) => {
    let { id } = req.params
    const sql = "delete from contact where id=?"
    pool.query(sql, [id], (err, result) => {
        if (err) {
            console.log("Contact.js=>/contact/delete接口", err)
            next(err)
            return
        }
        if (result.affectedRows > 0) {
            res.send(Response.success(null, "联系人删除成功！"))
        } else {
            res.send(Response.error("联系人删除失败！"))
        }
    })
})

/**
 * 添加联系人
 * @param {*} uid 
 * @param {*} name 
 * @param {*} tel 
 * @param {*} isDefault 
 * @param {*} next 
 * @param {*} res 
 */
function addContact(uid, name, tel, isDefault, next, res) {
    const sql = "insert into contact(user_id,name,tel,isDefault) values (?,?,?,?)"
    // 执行sql
    pool.query(sql, [uid, name, tel, isDefault], (err, result) => {
        console.log("插入------------------------------------------------------2", isDefault)
        if (err) {
            console.log("Contact.js=>/contact/add接口", err)
            next(err)
            return
        }
        if (result.affectedRows > 0) {
            res.send(Response.success(null, "联系人添加成功！"))
        } else {
            res.send(Response.error("联系人添加失败！"))
        }
    })
}
/**
 * 修改联系人信息
 * @param {*} name 
 * @param {*} tel 
 * @param {*} isDefault 
 * @param {*} id 
 * @param {*} err 
 * @param {*} res 
 */
function updateContact(name, tel, isDefault, id, res) {
    const sql2 = "update contact set name=?,tel=?,isDefault=? where id=?"
    pool.query(sql2, [name, tel, isDefault, id], (err2, result2) => {
        if (err2) {
            console.log("Contact.js=>/contact/update接口", err2)
            next(err)
            return
        }
        if (result2.affectedRows > 0) {
            res.send(Response.success(null, "默认联系人设置成功！"))
        } else {
            res.send(Response.error("默认联系人设置失败！"))
        }
    })
}

module.exports = router


